#include <STC8.H>

#define KEY_PIN P32  // 按键连接的引脚
#define DEBOUNCE_DELAY 20  // 按键消抖延时，单位：ms
#define LONG_PRESS_DELAY 1000  // 长按检测延时，单位：ms

bit keyState = 0;         // 按键状态，0表示未按下，1表示按下
bit keyPressFlag = 0;     // 按键按下标志位，1表示按下状态
bit longPressFlag = 0;    // 长按标志位，1表示长按状态
unsigned int debounceCount = 0;  // 消抖计数器
unsigned int longPressTimer = 0; // 长按计时器

// 初始化定时器
void TimerInit() {
    // 和之前的示例一样
}

// 定时器0中断处理函数
void Timer0_ISR() interrupt 1 {
    // 和之前的示例一样
}

// 检测按键状态
void CheckKey() {
    if (keyState == 0) {
        if (KEY_PIN == 0) {
            debounceCount++;
            if (debounceCount >= DEBOUNCE_DELAY) {
                keyState = 1;  // 按键按下
                debounceCount = 0;
                longPressTimer = 0;  // 重置长按计时器
            }
        }
    } else {
        if (KEY_PIN == 1) {
            keyState = 0;  // 按键松开
            debounceCount = 0;
            longPressTimer = 0;  // 重置长按计时器
        } else {
            longPressTimer++;
            if (longPressTimer >= LONG_PRESS_DELAY) {
                longPressFlag = 1;  // 长按标志位
            }
        }
    }
}

// 读取按键按下状态
bit ReadKeyPress() {
    if (keyPressFlag) {
        keyPressFlag = 0;
        return 1;
    }
    return 0;
}

// 读取按键长按状态
bit ReadLongPress() {
    if (longPressFlag) {
        longPressFlag = 0;
        return 1;
    }
    return 0;
}

void main() {
    // 初始化定时器
    TimerInit();

    while (1) {
        CheckKey();

        // 执行按键按下操作
        if (ReadKeyPress()) {
            // 执行按键按下操作
        }

        // 执行按键长按操作
        if (ReadLongPress()) {
            // 执行按键长按操作
        }

        // 其他主循环逻辑
        // ...
    }
}
